'use strict';
//用户表
let uniId = require('uni-id')
async function userCenter(event, context) {
	let noCheckAction = ['login', 'checkToken', 'sendSmsCode', 'register', 'forgetPassword','loginByWeixin']
	//校验token
	let payload = {}
	//处理url化的post接口
	if(event.body){
		let ip =event.headers['x-real-ip']
		event={
			...JSON.parse(event.body)
		},
		//这里需要手动传入context参数
		uniId = uniId.createInstance({ // 创建uni-id实例，其上方法同uniID
		    context:{
				PLATFORM:'app-plus',
				APPID:'__UNI__B10F710',
				LOCALE:'zh-Hans',
				CLIENTIP:ip
			}, // 传入context防止不同请求互相影响
		})
	}
	
	//用户带的参数
	let params = event.params || {}
	if (noCheckAction.indexOf(event.active) === -1) {
		if (!event.token) {
			return {
				code: 403,
				msg: '用户未登录或登录失效'
			}
		}
		//校验token
		payload = await uniId.checkToken(event.token);
		//校验失败
		if (payload.code && payload.code > 0) {
			return payload
		}
		params.uid = payload.uid //校验成功之后会返回用户Id
	}

	let res = {}
	if (event.active == 'login') { //登录
		res = await uniId.login({
			...params,
			// 不指定queryField的情况下只会查询username
			queryField: ['username', 'email', 'mobile']
		})
	} else if (event.active == 'register') { //注册
		res = await uniId.register({
			...params,
		})
	} else if (event.active == 'sendSmsCode') { //发送手机验证码
		// 生成验证码可以按自己的需求来，这里以生成6位数字为例
		const randomStr = '00000' + Math.floor(Math.random() * 1000000)
		const code = randomStr.substring(randomStr.length - 6)
		//这是真实的发送短信验证码
		res = await uniId.sendSmsCode({
			mobile: event.params.mobile,
			templateId:event.params.templateId,
			code,
			type: event.params.type
		})
		//这是模拟短信验证码
		// res = await uniId.setVerifyCode({
		// 	mobile: event.params.mobile,
		// 	code,
		// 	expiresIn: 300,
		// 	type: event.params.type
		// })
	} else if (event.active == 'changePassword') { //修改密码
		if (event.params.newPassword.length < 6) {
			res = {
				code: 400,
				msg: '密码长度不能低于6位'
			}
			return res
		}
		if (event.params.newPassword != event.params.passwordConfirmation) {
			res = {
				code: 400,
				msg: '新密码与确认密码不一致'
			}
			return res
		}
		res = await uniId.updatePwd({
			uid: payload.uid,
			oldPassword: event.params.oldPassword,
			newPassword: event.params.newPassword,
			passwordConfirmation: event.params.passwordConfirmation
		})
	} else if (event.active == 'updateAvatar') { //更新用户头像信息
		if (!event.params.avatar) {
			res = {
				code: 400,
				msg: '头像url不能为空'
			}
			return res
		}
		res = await uniId.setAvatar({
			uid: payload.uid,
			avatar: event.params.avatar
		})
	} else if (event.active == 'delectAvatar') { //删除用户头像信息
		if (!event.params.avatar) {
			res = {
				code: 400,
				msg: '头像url不能为空'
			}
			return res
		}
		// 云函数删除文件示例代码
		let result = await uniCloud.deleteFile({
			fileList: [event.params.avatar]
		})
		if (result[0].success) {
			res = {
				code: 0,
				msg: '头像删除成功'
			}
			return res
		} else {
			res = {
				code: 400,
				msg: '头像删除失败'
			}
			return res
		}

	} else if (event.active == 'getUserInfo') { //获取用户信息
		res = await uniId.getUserInfo({
			uid: payload.uid
		})
	} else if (event.active == 'forgetPassword') { //忘记密码
		//由于uni-id中没有忘记密码功能，我的思路【先手机号验证码直接登录--->重置密码】
		//先校验验证码 确保type和发送验证码/设置验证码时对应
		// res = await uniId.verifyCode({
		// 	mobile: event.params.mobile,
		// 	code: event.params.code,
		// 	type:event.params.type,
		// })
		// if(res.code!=0){
		// 	return res
		// }
		//验证码校验成功
		let result = await uniId.loginBySms({ //手机号验证码直接登录
			mobile: event.params.mobile,
			code: event.params.code,
		})
		if (result.code == 0) { //重置密码
			res = await uniId.resetPwd({
				uid: result.uid,
				password: event.params.password,
			})
			return res
		} else {
			res = result
			return res
		}
	} else if (event.active == 'loginByWeixin') { //微信登录
		res = await uniId.loginByWeixin({
			code: event.params.code
		});
	}

	//返回数据给客户端
	return res
}


exports.main = userCenter
